package com.travel.admin.config;

import java.util.List;
import java.util.concurrent.TimeUnit;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.format.FormatterRegistry;
import org.springframework.http.CacheControl;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.validation.MessageCodesResolver;
import org.springframework.validation.Validator;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.HandlerMethodReturnValueHandler;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.config.annotation.AsyncSupportConfigurer;
import org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

	@Override
	public void addArgumentResolvers(List<HandlerMethodArgumentResolver> arg0) {
		

	}

	@Override
	public void addCorsMappings(CorsRegistry registry) {
//		registry.addMapping("/**")
//				.allowedOrigins("*")
//				.allowedMethods("*")    // 配置跨域请求支持的方式
//				.allowedHeaders("*");
		//已解决了跨域问题，参考CorsConfig
	}

	@Override
	public void addFormatters(FormatterRegistry arg0) {
		

	}
	
	@Bean
	public AuthenticationInterceptor getAuthenticationInterceptor(){
		return new AuthenticationInterceptor();
	}
	

	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		String[] swaggerExcludes = new String[]{"/static/**","/swagger-ui/**","/swagger-ui.html",
				"/swagger-resources/**","/webjars/**","/v2/api-docs","/doc.html"};
		registry.addInterceptor(getAuthenticationInterceptor()).addPathPatterns("/**")
			.excludePathPatterns(swaggerExcludes);
		registry.addInterceptor(this.getAuthenticationInterceptor());
	}

	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
		registry.addResourceHandler("/**","/static/**","/swagger-ui/**").
				addResourceLocations("classpath:/META-INF/resources/","classpath:/static/","classpath:/META-INF/resources/webjars/springfox-swagger-ui/")
				.setCacheControl(CacheControl.maxAge(1, TimeUnit.HOURS).cachePublic());
	}

	@Override
	public void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> arg0) {
		

	}

	@Override
	public void addViewControllers(ViewControllerRegistry registry) {
		registry.addViewController( "/swagger-ui/").setViewName("forward:/swagger-ui/index.html");
	}

	@Override
	public void configureAsyncSupport(AsyncSupportConfigurer arg0) {
		

	}

	@Override
	public void configureContentNegotiation(ContentNegotiationConfigurer arg0) {
		

	}

	@Override
	public void configureDefaultServletHandling(DefaultServletHandlerConfigurer arg0) {
		

	}

	@Override
	public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> arg0) {
		

	}

	@Override
	public void configureMessageConverters(List<HttpMessageConverter<?>> arg0) {
		

	}

	@Override
	public void configurePathMatch(PathMatchConfigurer arg0) {
		

	}

	@Override
	public void configureViewResolvers(ViewResolverRegistry arg0) {
		

	}

	@Override
	public void extendHandlerExceptionResolvers(List<HandlerExceptionResolver> arg0) {
		

	}

	@Override
	public void extendMessageConverters(List<HttpMessageConverter<?>> arg0) {
		

	}

	@Override
	public MessageCodesResolver getMessageCodesResolver() {
		
		return null;
	}

	@Override
	public Validator getValidator() {
		
		return null;
	}

}
